home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
asm
/
demos
/
dottunnel
/
dottunnelfinished.s
< prev
Wrap
Text File
|
1980-01-06
|
34KB
|
1,555 lines
Track: EQU 0
NoOfRings: EQU 40 ;40 A1200
;30 A500
YSpace: EQU 32
Raster: EQU 0
MyDmacon=%01111100000
; abcdefghhhh
; a = Blitter nasty
; b = Enable DMA activity (always set this!)
; c = Bitplane enable
; d = Copper enable
; e = Blitter enable
; f = Sprite enable
; g = Disk enable
; h = Audio channels enable
MyIntena=%100000000100000
; abcdeeeefghijkl
; a = Enable interrupts
; b = Lev. 6 External interrupt
; c = Lev. 5 Disk sync found
; d = Lev. 5 Serial port receive buffer full
; e = Lev. 4 Audio ch. 3-0 block finished
; f = Lev. 3 Blitter finished
; g = Lev. 3 Vertical blank
; h = Lev. 3 Copper
; i = Lev. 2 I/O Ports and timers
; j = Lev. 1 Software
; k = Lev. 1 Disk block finished
; l = Lev. 1 Serial port transmit buffer empty
JumpPtr Begin
*******************************************************************************
**Macros
*******************************************************************************
WaitBlt: MACRO
.vent\@: if Raster=1
move.w #$fff,Color00+_Custom
endif
btst #14,Dmaconr+_Custom
bne.b .vent\@
if Raster=1
move.w #0,Color00+_Custom
endif
ENDM
SetInt: MACRO
move.l (Lev\1Base).w,OldIrq\1
move.l #Lev\1Irq,(Lev\1Base).w
bra.b jumpo\@
OldIrq\1: dc.l 0
jumpo\@:
ENDM
ClrInt: MACRO
move.l OldIrq\1(pc),(Lev\1Base).w
ENDM
Push.l: MACRO
movem.l \1,-(sp)
ENDM
Push.w: MACRO
movem.w \1,-(sp)
ENDM
Pull.l: MACRO
movem.l (sp)+,\1
ENDM
Pull.w: MACRO
movem.w (sp)+,\1
ENDM
StartPrg: MACRO
move.w #$7fff,Intreq+_Custom
move.w #MyDmacon+$8000,Dmacon+_Custom
move.w #MyIntena+$8000,Intena+_Custom
ENDM
StopPrg: MACRO
move.w #$7fff,Intena+_Custom
move.w #$7fff,Dmacon+_Custom
move.w #$7fff,Intreq+_Custom
ENDM
StopSystem: MACRO
move.w Intenar+_Custom,OldIntena
move.w Dmaconr+_Custom,OldDmacon
StopPrg
bra.b jumpo\@
OldIntena: dc.w 0
OldDmacon: dc.w 0
jumpo\@:
ENDM
StartSystem: MACRO
move.w OldDmacon(pc),d0
or.w #$8000,d0
move.w d0,Dmacon+_Custom
move.w OldIntena(pc),d0
or.w #$8000,d0
move.w d0,Intena+_Custom
ENDM
ClearBss: MACRO
lea _Bss1Start,a0
move.l #(_Bss1End-_Bss1Start)/4,d0
.clrloop\@ clr.l (a0)+
subq.l #1,d0
bne.b .clrloop\@
ENDM
*******************************************************************************
**
** Initialisering
**
*******************************************************************************
SECTION DenFedeKode,code
Begin: IFEQ Track-0
Push.l d0-a6
StopSystem
ELSE
move.l #Lev3Irq,$64.w
rts
ENDC
**Init starter -----------------------------------
ClearBss 1
ClearBss 2
bsr ComputeColors
bsr InitAGACopper
lea ColorArray,a0
lea AGA_Colors,a1
moveq #0,d0
moveq #7,d1
bsr LoadAGACopper
bsr Init_Rings
bsr InitPerspTable
bsr InitCodeBuffer
IFEQ Track-0
clr.l 0.w
SetInt 3
**Init slutter -----------------------------------
WaitBlt
StartPrg
*******************************************************************************
**
** Vent på exitsignal
**
*******************************************************************************
WaitForExit: tst.b VBlank
beq.b WaitForExit
clr.b VBlank
tst.b IWantOut
bne.b ExitToDos
bra.b WaitForExit
*******************************************************************************
**
** Exit to AmigaDOS
**
*******************************************************************************
ExitToDos:
StopPrg
**Exit starter -----------------------------------
move.w #0,Copcon+_Custom
ClrInt 3
**Exit slutter -----------------------------------
StartSystem
Pull.l d0-a6
moveq #0,d0
ENDC
rts
*******************************************************************************
**
** Level 3 interrupt
**
*******************************************************************************
Lev3Irq: st VBlank
push.l d0-a6
**Lev3irq starter --------------------------------
move.l #Copper,Cop2lch+_Custom
move.w #%10,Copcon+_Custom
move.w d0,Copjmp2+_Custom
lea Routines(pc),a0
move.w Status(pc),d0
add.w d0,d0
add.w d0,d0
move.l (a0,d0.w),a0
jsr (a0)
**Lev3irq slutter --------------------------------
IF Raster=1
move.w #$f00,Color00+_Custom
ENDIF
IF Raster=1
move.w #$00f,Color00+_Custom
ENDIF
move.b $dff005,d0
lsl.w #8,d0
move.b $dff006,d0
cmp.w MaxRast,d0
blt.b .ud
move.w d0,MaxRast
.ud:
pull.l d0-a6
IFEQ Track-0
move.w #$0020,Intreq+_Custom
ELSE
move.w #$0004,Intreq+_Custom
ENDC
rte
Status: dc.w 0
Routines: dc.l FadeUp,RingHandler,FadeDown
RingHandler: bsr SwapScr
bsr ClrScr
bsr Storyboard
bsr Draw_Rings
bsr Move_Rings
rts
*******************************************************************************
**
** Storyboard
**
*******************************************************************************
Storyboard: move.w Story,d0
beq.b Story_00
subq.w #1,d0
beq.b Story_01
subq.w #1,d0
beq.b Story_02
rts
Story_00: addq.w #2,Ring_Max
cmp.w #256,Ring_Max
bne.b .not
addq.w #1,Story
move.w #10*50,Story_Pause
.not rts
Story_01: subq.w #1,Story_Pause
beq.b .next
IFEQ Track-0
btst #6,$bfe001
beq.b .next
ENDC
rts
.next addq.w #1,Story
rts
Story_02: addq.w #2,Ring_Min
cmp.w #256,Ring_Min
bne.b .out
addq.w #1,Status
.out rts
FadeUp: move.l #FadeCopper,Cop2lch+_Custom
move.w d0,Copjmp2+_Custom
move.w mycol+2,d0
move.w #$312,d1
bsr fader
move.w d0,mycol+2
cmp.w #$312,d0
bne.b .out
addq.w #1,Status
.out rts
FadeDown: move.l #FadeCopper,Cop2lch+_Custom
move.w d0,Copjmp2+_Custom
move.w mycol+2,d0
moveq #0,d1
bsr fader
move.w d0,mycol+2
tst.w d0
seq IWantOut
rts
**d0=fade from
**d1=fade to
**out: d0=newcol
fader: move.w d0,d2
move.w d1,d3
lsr.w #8,d2
lsr.w #8,d3
cmp.w d2,d3
beq.b .nored
blt.b .redsub
add.w #$100,d0
bra.b .nored
.redsub: sub.w #$100,d0
.nored: move.w d0,d2
move.w d1,d3
lsr.w #4,d2
lsr.w #4,d3
and.w #$f,d2
and.w #$f,d3
cmp.w d2,d3
beq.b .nogreen
blt.b .greensub
add.w #$10,d0
bra.b .nogreen
.greensub: sub.w #$10,d0
.nogreen: move.w d0,d2
move.w d1,d3
and.w #$f,d2
and.w #$f,d3
cmp.w d2,d3
beq.b .noblue
blt.b .bluesub
addq.w #$1,d0
bra.b .noblue
.bluesub: subq.w #$1,d0
.noblue: rts
*******************************************************************************
**
** Initialiser PerspTable
**
*******************************************************************************
InitPerspTable: lea PerspTable,a0
move.w #256-1,d7
.loop move.w d7,d0
mulu #190,d0
add.w #6000,d0
move.l #6000*255,d1
divu d0,d1
move.w d1,(a0)+
dbra d7,.loop
rts
*******************************************************************************
**
** Draw all rings
**
*******************************************************************************
Draw_Rings: clr.w Ring_Counter
.next lea Ring_Array,a0
move.w Ring_Counter,d0
mulu #Ring_SIZEOF,d0
add.w d0,a0
moveq #0,d0
moveq #0,d1
moveq #0,d2
move.w (a0)+,d1
move.b (a0)+,d2
move.b (a0)+,d0
cmp.w Ring_Min,d0
blt.b .dont
cmp.w Ring_Max,d0
bgt.b .dont
ext.l d1
move.w d0,d3
not.b d3
mulu #3,d3
lsr.l #8,d3
mulu #(288+113+YSpace)*80,d3
add.l d3,d1
; lea PerspTable,a0
; add.w d0,d0
; move.w (a0,d0.w),d0
bsr DrawCircle
.dont addq.w #1,Ring_Counter
cmp.w #NoOfRings,Ring_Counter
bne.b .next
rts
Move_Rings: lea Ring_Array,a0
moveq #0,d7
.next addq.b #2,3(a0)
bcs.b .ooops
addq.w #4,a0
.donext addq.w #1,d7
cmp.w #NoOfRings,d7
bne.b .next
rts
.ooops bsr Init_OneRing
bra.b .donext
Init_Rings: lea Ring_Array,a0
moveq #NoOfRings-1,d0 ;ringnumber
.next bsr Init_OneRing
move.w #256,d1
mulu d0,d1
divu #NoOfRings,d1
move.b d1,-1(a0)
subq.w #1,d0
bge.b .next
rts
Init_OneRing: lea Tunnel_YTab,a1
add.w Tunnel_YTabPtr,a1
move.w (a1),d2
lea Tunnel_XTab,a1
add.w Tunnel_XTabPtr,a1
move.w (a1),d3
addq.w #2,Tunnel_YTabPtr
and.w #128-1,Tunnel_YTabPtr
addq.w #2,Tunnel_XTabPtr
and.w #128-1,Tunnel_XTabPtr
move.w d3,d4
asr.w #3,d4
add.w d4,d2
and.w #7,d3
move.w d2,(a0)+
move.b d3,(a0)+
addq.w #1,a0
rts
**input:
** d0.w: size
** d1.l: byteoffset
** d2.w: bitoffset
DrawCircle: lea CodeTable,a0
add.w d0,d0
add.w d0,d0
move.l (a0,d0.w),JumpCode+2
move.w #$4000,Intena+_Custom
move.l a7,OldSP
move.l Screen_Draw,a7
add.l d1,a7
add.w #144*80+22,a7
add.w d2,d2
add.w d2,d2
move.l _BitJumps(PC,d2.w),a1
jmp (a1)
_BitJumps: dc.l _Bit0,_Bit1,_Bit2,_Bit3,_Bit4,_Bit5,_Bit6,_Bit7
_Bit0: move.l a7,a0
move.l a7,a1
move.l a7,a2
move.l a7,a3
move.l a7,a4
move.l a7,a5
move.l a7,a6
moveq #0,d0
moveq #1,d1
moveq #2,d2
moveq #3,d3
moveq #4,d4
moveq #5,d5
moveq #6,d6
moveq #7,d7
jmp JumpCode
_Bit1: lea 1(a7),a0
move.l a7,a1
move.l a7,a2
move.l a7,a3
move.l a7,a4
move.l a7,a5
move.l a7,a6
moveq #7,d0
moveq #0,d1
moveq #1,d2
moveq #2,d3
moveq #3,d4
moveq #4,d5
moveq #5,d6
moveq #6,d7
jmp JumpCode
_Bit2: lea 1(a7),a0
move.l a0,a1
move.l a7,a2
move.l a7,a3
move.l a7,a4
move.l a7,a5
move.l a7,a6
moveq #6,d0
moveq #7,d1
moveq #0,d2
moveq #1,d3
moveq #2,d4
moveq #3,d5
moveq #4,d6
moveq #5,d7
jmp JumpCode
_Bit3: lea 1(a7),a0
move.l a0,a1
move.l a0,a2
move.l a7,a3
move.l a7,a4
move.l a7,a5
move.l a7,a6
moveq #5,d0
moveq #6,d1
moveq #7,d2
moveq #0,d3
moveq #1,d4
moveq #2,d5
moveq #3,d6
moveq #4,d7
jmp JumpCode
_Bit4: lea 1(a7),a0
move.l a0,a1
move.l a0,a2
move.l a0,a3
move.l a7,a4
move.l a7,a5
move.l a7,a6
moveq #4,d0
moveq #5,d1
moveq #6,d2
moveq #7,d3
moveq #0,d4
moveq #1,d5
moveq #2,d6
moveq #3,d7
jmp JumpCode
_Bit5: lea 1(a7),a0
move.l a0,a1
move.l a0,a2
move.l a0,a3
move.l a0,a4
move.l a7,a5
move.l a7,a6
moveq #3,d0
moveq #4,d1
moveq #5,d2
moveq #6,d3
moveq #7,d4
moveq #0,d5
moveq #1,d6
moveq #2,d7
jmp JumpCode
_Bit6: lea 1(a7),a0
move.l a0,a1
move.l a0,a2
move.l a0,a3
move.l a0,a4
move.l a0,a5
move.l a7,a6
moveq #2,d0
moveq #3,d1
moveq #4,d2
moveq #5,d3
moveq #6,d4
moveq #7,d5
moveq #0,d6
moveq #1,d7
jmp JumpCode
_Bit7: lea 1(a7),a0
move.l a0,a1
move.l a0,a2
move.l a0,a3
move.l a0,a4
move.l a0,a5
move.l a0,a6
moveq #1,d0
moveq #2,d1
moveq #3,d2
moveq #4,d3
moveq #5,d4
moveq #6,d5
moveq #7,d6
moveq #0,d7
jmp JumpCode
RestoreSP: move.l OldSP,a7
move.w #$4000!$8000,Intena+_Custom
rts
*******************************************************************************
**
** Compute some colors
**
*******************************************************************************
ComputeColors: lea ColorArray,a0
moveq #0,d0
.exanext moveq #0,d1
.testigen btst d1,d0
bne.b .found
addq.w #1,d1
cmp.w #3,d1
bne.b .testigen
move.l #$331122,d2
bra.b .gotcolor
.found add.w d1,d1
add.w d1,d1
move.l .colors(PC,d1.w),d2
.gotcolor move.l d2,(a0)+
addq.w #1,d0
cmp.w #8,d0
bne.b .exanext
rts
.colors dc.l $ffbbff,$bb77aa,$774466
*******************************************************************************
**
** Fade 24bit colors
**
** input:
** d0.l=source color
** d1.l=dest color
** d6.w=step
** d7.w=last step
**
** output:
** d2.l=new color
**
** trashed regs:
** d0-d6
**
*******************************************************************************
FadeAGA: move.l d0,d2
move.l d1,d3
swap d2
swap d3
sub.w d2,d3
muls d6,d3
divs d7,d3
add.w d2,d3
swap d3
clr.w d3 ;R
move.l d0,d2
move.l d1,d4
and.w #$ff00,d2
and.w #$ff00,d4
sub.w d2,d4
lsr.w #8,d4
muls d6,d4
divs d7,d4
lsl.w #8,d4
add.w d2,d4
and.l #$00ff00,d4 ;G
move.w d0,d5
move.w d1,d2
and.w #$00ff,d5
and.w #$00ff,d2
sub.w d5,d2
muls d6,d2
divs d7,d2
add.w d5,d2
and.l #$0000ff,d2 ;B
or.l d3,d2
or.l d4,d2 ;color
rts
*******************************************************************************
**
** Load AGA copper with colors
**
** input:
** a0.l=24bit color array (00000000RRRRRRRRGGGGGGGGBBBBBBBB per color)
** a1.l=initialized aga copper array
** d0.w=start color
** d1.w=end color
**
*******************************************************************************
LoadAGACopper: moveq #0,d2 ;color index to current bank
sub.w d0,d1 ;number of colors to load
move.w d1,d7 ;color countdown
move.w d0,d6
beq.b .noskip
add.w d0,d0
add.w d0,d0
add.w d0,a0 ;skip first colors
move.w d6,d0
lsr.w #5,d0
mulu #33*2*4,d0
add.w d0,a1 ;skip first banks
and.w #$1f,d6
.noskip addq.w #4,a1
clr.w -(sp)
lea (8+1)*4(a1),a2 ;lower nibbles
.next move.l (a0)+,d0
move.l d0,d3
move.w d0,d1
move.l d0,d2
and.w #$000f,d0
and.w #$0f00,d1
lsr.w #4,d1
swap d2
and.w #$f,d2
lsl.w #8,d2
or.w d2,d1
or.w d1,d0
move.w d0,2(a2)
move.l d3,d0
move.w d0,d1
move.l d0,d2
and.w #$f0,d0
lsr.w #4,d0
move.w d1,(sp)
move.b (sp),d1
and.w #$00f0,d1
swap d2
and.w #$00f0,d2
lsl.w #4,d2
or.w d2,d1
or.w d1,d0
move.w d0,2(a1)
addq.w #4,a1
addq.w #4,a2
subq.w #1,d7
blt.b .out
addq.w #1,d6
cmp.w #$20,d6
bne.b .next
lea 34*4(a1),a1
lea 34*4(a2),a2
moveq #0,d6
bra.b .next
.out clr.w (sp)+
rts
*******************************************************************************
**
** Init AGA copper-array
**
*******************************************************************************
InitAGACopper: lea AGA_Colors,a0
move.l #Bplcon3<<16!$0c40,d0
move.l #Bplcon3<<16!$0e40,d1
moveq #1-1,d7
.loop move.l d0,(a0)+
bsr .fillit
move.l d1,(a0)+
bsr .fillit
add.w #$2000,d0
add.w #$2000,d1
dbra d7,.loop
rts
.fillit move.w #Color00,d2
moveq #8-1,d6
.fillloop move.w d2,(a0)+
clr.w (a0)+
addq.w #2,d2
dbra d6,.fillloop
rts
*******************************************************************************
**
** Initialiser CodeBuffer
**
*******************************************************************************
InitCodeBuffer: lea CodeBuffer,a0
lea SinTable,a1
lea CosTable,a2
lea CodeTable,a3
lea PerspTable,a4
moveq #0,d0 ;ringsize
moveq #0,d1 ;angle
.next move.l a0,(a3)+
moveq #64-1,d7
.loop moveq #0,d2
moveq #0,d3
move.w (a1,d1.w),d2
move.w (a2,d1.w),d3
move.w d0,d4
add.w d4,d4
move.w (a4,d4.w),d4
muls d4,d2
muls d4,d3
swap d2
swap d3
rol.l #2,d2
rol.l #2,d3
muls #80,d3
move.w d2,d4
asr.w #3,d4
add.w d4,d3 ;byteoffset
bsr _GetOpcode
move.w d4,(a0)+
move.w d3,(a0)+
add.w #2048/64,d1
and.w #2048-1,d1
dbra d7,.loop
move.w #$4EF9,(a0)+
move.l #RestoreSP,(a0)+
add.w #2,d1
and.w #2048-1,d1
addq.w #1,d0
cmp.w #64,d0
bne.b .next
.next2 move.l a0,(a3)+
moveq #64-1,d7
.loop2 moveq #0,d2
moveq #0,d3
move.w (a1,d1.w),d2
move.w (a2,d1.w),d3
move.w d0,d4
add.w d4,d4
move.w (a4,d4.w),d4
muls d4,d2
muls d4,d3
swap d2
swap d3
rol.l #2,d2
rol.l #2,d3
muls #80,d3
move.w d2,d4
asr.w #3,d4
add.w d4,d3 ;byteoffset
bsr _GetOpcode
move.w d4,(a0)+
move.w d3,(a0)+
move.w d4,(a0)+
add.w #80,d3
move.w d3,(a0)+
add.w #2048/64,d1
and.w #2048-1,d1
dbra d7,.loop2
move.w #$4EF9,(a0)+
move.l #RestoreSP,(a0)+
add.w #2,d1
and.w #2048-1,d1
addq.w #1,d0
cmp.w #64*2,d0
bne.b .next2
.next3 move.l a0,(a3)+
moveq #64-1,d7
.loop3 moveq #0,d2
moveq #0,d3
move.w (a1,d1.w),d2
move.w (a2,d1.w),d3
move.w d0,d4
add.w d4,d4
move.w (a4,d4.w),d4
muls d4,d2
muls d4,d3
swap d2
swap d3
rol.l #2,d2
rol.l #2,d3
push.w d2/d3
muls #80,d3
move.w d2,d4
asr.w #3,d4
add.w d4,d3 ;byteoffset
bsr _GetOpcode
move.w d4,(a0)+
move.w d3,(a0)+
move.w d4,(a0)+
add.w #80,d3
move.w d3,(a0)+
pull.w d2/d3
addq.w #1,d2
muls #80,d3
move.w d2,d4
asr.w #3,d4
add.w d4,d3 ;byteoffset
bsr _GetOpcode
move.w d4,(a0)+
move.w d3,(a0)+
add.w #2048/64,d1
and.w #2048-1,d1
dbra d7,.loop3
move.w #$4EF9,(a0)+
move.l #RestoreSP,(a0)+
add.w #2,d1
and.w #2048-1,d1
addq.w #1,d0
cmp.w #64*3,d0
bne.b .next3
.next4 move.l a0,(a3)+
moveq #64-1,d7
.loop4 moveq #0,d2
moveq #0,d3
move.w (a1,d1.w),d2
move.w (a2,d1.w),d3
move.w d0,d4
add.w d4,d4
move.w (a4,d4.w),d4
muls d4,d2
muls d4,d3
swap d2
swap d3
rol.l #2,d2
rol.l #2,d3
push.w d2/d3
muls #80,d3
move.w d2,d4
asr.w #3,d4
add.w d4,d3 ;byteoffset
bsr _GetOpcode
move.w d4,(a0)+
move.w d3,(a0)+
move.w d4,(a0)+
add.w #80,d3
move.w d3,(a0)+
pull.w d2/d3
addq.w #1,d2
muls #80,d3
move.w d2,d4
asr.w #3,d4
add.w d4,d3 ;byteoffset
bsr _GetOpcode
move.w d4,(a0)+
move.w d3,(a0)+
move.w d4,(a0)+
add.w #80,d3
move.w d3,(a0)+
add.w #2048/64,d1
and.w #2048-1,d1
dbra d7,.loop4
move.w #$4EF9,(a0)+
move.l #RestoreSP,(a0)+
add.w #2,d1
and.w #2048-1,d1
addq.w #1,d0
cmp.w #256,d0
bne.w .next4
rts
**input:
** d2.w: bitnummer
**output:
** d4.w: opcode
_GetOpcode: and.w #7,d2
add.w d2,d2
add.w d2,d2
move.w _DotCode(PC,d2.w),d4
rts
_DotCode: bset d7,0(a7)
bset d6,0(a6)
bset d5,0(a5)
bset d4,0(a4)
bset d3,0(a3)
bset d2,0(a2)
bset d1,0(a1)
bset d0,0(a0)
*******************************************************************************
**
** Clear screen using blitter
**
*******************************************************************************
ClrScr: move.l Screen_Clear,d0
lea CopBlit1+2,a0
bsr.b .insert
lea CopBlit2+2,a0
bsr.b .insert
lea CopBlit3+2,a0
.insert move.w d0,4(a0)
swap d0
move.w d0,(a0)
swap d0
add.l #(288+113+YSpace)*80,d0
rts
*******************************************************************************
**
** Swap screen for doublebuffering!
**
*******************************************************************************
SwapScr: lea Screen_Clear+3*4,a0
lea -4(a0),a1
move.l (a1),d7
moveq #3-2,d6
.cloop move.l -(a1),-(a0)
dbra d6,.cloop
move.l d7,(a1)
lea Copper_PlanePtr+2,a3
move.l Screen_Show,d0
moveq #3-1,d7
.loop move.w d0,4(a3)
swap d0
move.w d0,(a3)
swap d0
add.l #(288+113+YSpace)*80,d0
addq.w #8,a3
dbra d7,.loop
rts
*******************************************************************************
**
** Variable
**
*******************************************************************************
SECTION VariableTing,bss
CNOP 0,4
_Bss2Start:
OldSP: ds.l 1
MaxRast: ds.w 1
VBlank: ds.b 1
IFEQ Track-0
IWantOut: ds.b 1
ELSE
IWantOut: EQU $80
ds.b 1
ENDC
ColorArray: ds.l 8
CodeBuffer: ds.b 64*(4*64*1+6)
ds.b 64*(4*64*2+6)
ds.b 64*(4*64*3+6)
ds.b 64*(4*64*4+6)
_CodeBufferEnd:
CodeTable: ds.l 256
RSRESET
Ring_BytePos: rs.w 1
Ring_BitPos: rs.b 1
Ring_Size: rs.b 1
Ring_SIZEOF: rs.b 0
Ring_Array: ds.b NoOfRings*Ring_SIZEOF
Ring_Counter: ds.w 1
Tunnel_YTabPtr: ds.w 1
Tunnel_XTabPtr: ds.w 1
PerspTable: ds.w 256
Story: ds.w 1
Ring_Min: ds.w 1
Ring_Max: ds.w 1
Story_Pause: ds.w 1
CNOP 0,4
_Bss2End:
SECTION SjovData,data
Screen_Clear: dc.l Screen1
Screen_Draw: dc.l Screen2
Screen_Show: dc.l Screen3
;Option nº = 1
;Min. y-val = -1.63840E+04
;Max. y-val = 1.63840E+04
;Startvalue = min
;Length = 1024
SinTable: dc.w 0,101,201,302,402,503,603,704,804,904,1005,1105,1205,1306,1406,1506
dc.w 1606,1706,1806,1906,2006,2105,2205,2305,2404,2503,2603,2702,2801,2900,2999,3098
dc.w 3196,3295,3393,3492,3590,3688,3786,3883,3981,4078,4176,4273,4370,4467,4563,4660
dc.w 4756,4852,4948,5044,5139,5235,5330,5425,5520,5614,5708,5803,5897,5990,6084,6177
dc.w 6270,6363,6455,6547,6639,6731,6823,6914,7005,7096,7186,7276,7366,7456,7545,7635
dc.w 7723,7812,7900,7988,8076,8163,8250,8337,8423,8509,8595,8680,8765,8850,8935,9019
dc.w 9102,9186,9269,9352,9434,9516,9598,9679,9760,9841,9921,10001,10080,10159,10238,10316
dc.w 10394,10471,10549,10625,10702,10778,10853,10928,11003,11077,11151,11224,11297,11370,11442,11514
dc.w 11585,11656,11727,11797,11866,11935,12004,12072,12140,12207,12274,12340,12406,12472,12537,12601
dc.w 12665,12729,12792,12854,12916,12978,13039,13100,13160,13219,13279,13337,13395,13453,13510,13567
dc.w 13623,13678,13733,13788,13842,13896,13949,14001,14053,14104,14155,14206,14256,14305,14354,14402
dc.w 14449,14497,14543,14589,14635,14680,14724,14768,14811,14854,14896,14937,14978,15019,15059,15098
dc.w 15137,15175,15213,15250,15286,15322,15357,15392,15426,15460,15493,15525,15557,15588,15619,15649
dc.w 15679,15707,15736,15763,15791,15817,15843,15868,15893,15917,15941,15964,15986,16008,16029,16049
dc.w 16069,16088,16107,16125,16143,16160,16176,16192,16207,16221,16235,16248,16261,16273,16284,16295
dc.w 16305,16315,16324,16332,16340,16347,16353,16359,16364,16369,16373,16376,16379,16381,16383,16384
CosTable: dc.w 16384,16384,16383,16381,16379,16376,16373,16369,16364,16359,16353,16347,16340,16332,16324,16315
dc.w 16305,16295,16284,16273,16261,16248,16235,16221,16207,16192,16176,16160,16143,16125,16107,16088
dc.w 16069,16049,16029,16008,15986,15964,15941,15917,15893,15868,15843,15817,15791,15763,15736,15707
dc.w 15679,15649,15619,15588,15557,15525,15493,15460,15426,15392,15357,15322,15286,15250,15213,15175
dc.w 15137,15098,15059,15019,14978,14937,14896,14854,14811,14768,14724,14680,14635,14589,14543,14497
dc.w 14449,14402,14354,14305,14256,14206,14155,14104,14053,14001,13949,13896,13842,13788,13733,13678
dc.w 13623,13567,13510,13453,13395,13337,13279,13219,13160,13100,13039,12978,12916,12854,12792,12729
dc.w 12665,12601,12537,12472,12406,12340,12274,12207,12140,12072,12004,11935,11866,11797,11727,11656
dc.w 11585,11514,11442,11370,11297,11224,11151,11077,11003,10928,10853,10778,10702,10625,10549,10471
dc.w 10394,10316,10238,10159,10080,10001,9921,9841,9760,9679,9598,9516,9434,9352,9269,9186
dc.w 9102,9019,8935,8850,8765,8680,8595,8509,8423,8337,8250,8163,8076,7988,7900,7812
dc.w 7723,7635,7545,7456,7366,7276,7186,7096,7005,6914,6823,6731,6639,6547,6455,6363
dc.w 6270,6177,6084,5990,5897,5803,5708,5614,5520,5425,5330,5235,5139,5044,4948,4852
dc.w 4756,4660,4563,4467,4370,4273,4176,4078,3981,3883,3786,3688,3590,3492,3393,3295
dc.w 3196,3098,2999,2900,2801,2702,2603,2503,2404,2305,2205,2105,2006,1906,1806,1706
dc.w 1606,1506,1406,1306,1205,1105,1005,904,804,704,603,503,402,302,201,101
dc.w 0,-101,-201,-302,-402,-503,-603,-703,-804,-904,-1005,-1105,-1205,-1306,-1406,-1506
dc.w -1606,-1706,-1806,-1906,-2006,-2105,-2205,-2305,-2404,-2503,-2603,-2702,-2801,-2900,-2999,-3098
dc.w -3196,-3295,-3393,-3492,-3590,-3688,-3786,-3883,-3981,-4078,-4176,-4273,-4370,-4467,-4563,-4660
dc.w -4756,-4852,-4948,-5044,-5139,-5235,-5330,-5425,-5520,-5614,-5708,-5803,-5897,-5990,-6084,-6177
dc.w -6270,-6363,-6455,-6547,-6639,-6731,-6823,-6914,-7005,-7096,-7186,-7276,-7366,-7456,-7545,-7635
dc.w -7723,-7812,-7900,-7988,-8076,-8163,-8250,-8337,-8423,-8509,-8595,-8680,-8765,-8850,-8935,-9019
dc.w -9102,-9186,-9269,-9352,-9434,-9516,-9598,-9679,-9760,-9840,-9921,-10001,-10080,-10159,-10238,-10316
dc.w -10394,-10471,-10549,-10625,-10702,-10778,-10853,-10928,-11003,-11077,-11151,-11224,-11297,-11370,-11442,-11514
dc.w -11585,-11656,-11727,-11797,-11866,-11935,-12004,-12072,-12140,-12207,-12274,-12340,-12406,-12472,-12537,-12601
dc.w -12665,-12729,-12792,-12854,-12916,-12978,-13039,-13100,-13160,-13219,-13279,-13337,-13395,-13453,-13510,-13567
dc.w -13623,-13678,-13733,-13788,-13842,-13896,-13949,-14001,-14053,-14104,-14155,-14206,-14256,-14305,-14354,-14402
dc.w -14449,-14497,-14543,-14589,-14635,-14680,-14724,-14768,-14811,-14854,-14896,-14937,-14978,-15019,-15059,-15098
dc.w -15137,-15175,-15213,-15250,-15286,-15322,-15357,-15392,-15426,-15460,-15493,-15525,-15557,-15588,-15619,-15649
dc.w -15679,-15707,-15736,-15763,-15791,-15817,-15843,-15868,-15893,-15917,-15941,-15964,-15986,-16008,-16029,-16049
dc.w -16069,-16088,-16107,-16125,-16143,-16160,-16176,-16192,-16207,-16221,-16235,-16248,-16261,-16273,-16284,-16295
dc.w -16305,-16315,-16324,-16332,-16340,-16347,-16353,-16359,-16364,-16369,-16373,-16376,-16379,-16381,-16383,-16384
dc.w -16384,-16384,-16383,-16381,-16379,-16376,-16373,-16369,-16364,-16359,-16353,-16347,-16340,-16332,-16324,-16315
dc.w -16305,-16295,-16284,-16273,-16261,-16248,-16235,-16221,-16207,-16192,-16176,-16160,-16143,-16125,-16107,-16088
dc.w -16069,-16049,-16029,-16008,-15986,-15964,-15941,-15917,-15893,-15868,-15843,-15817,-15791,-15763,-15736,-15707
dc.w -15679,-15649,-15619,-15588,-15557,-15525,-15493,-15460,-15426,-15392,-15357,-15322,-15286,-15250,-15213,-15175
dc.w -15137,-15098,-15059,-15019,-14978,-14937,-14896,-14854,-14811,-14768,-14724,-14680,-14635,-14589,-14543,-14497
dc.w -14449,-14402,-14354,-14305,-14256,-14206,-14155,-14104,-14053,-14001,-13949,-13896,-13842,-13788,-13733,-13678
dc.w -13623,-13567,-13510,-13453,-13395,-13337,-13279,-13219,-13160,-13100,-13039,-12978,-12916,-12854,-12792,-12729
dc.w -12665,-12601,-12537,-12472,-12406,-12340,-12274,-12207,-12140,-12072,-12004,-11935,-11866,-11797,-11727,-11656
dc.w -11585,-11514,-11442,-11370,-11297,-11224,-11151,-11077,-11003,-10928,-10853,-10778,-10702,-10625,-10549,-10471
dc.w -10394,-10316,-10238,-10159,-10080,-10001,-9921,-9841,-9760,-9679,-9598,-9516,-9434,-9352,-9269,-9186
dc.w -9102,-9019,-8935,-8850,-8765,-8680,-8595,-8509,-8423,-8337,-8250,-8163,-8076,-7988,-7900,-7812
dc.w -7723,-7635,-7545,-7456,-7366,-7277,-7186,-7096,-7005,-6914,-6823,-6731,-6639,-6547,-6455,-6363
dc.w -6270,-6177,-6084,-5990,-5897,-5803,-5708,-5614,-5520,-5425,-5330,-5235,-5139,-5044,-4948,-4852
dc.w -4756,-4660,-4563,-4467,-4370,-4273,-4176,-4078,-3981,-3883,-3786,-3688,-3590,-3492,-3393,-3295
dc.w -3196,-3098,-2999,-2900,-2801,-2702,-2603,-2503,-2404,-2305,-2205,-2105,-2006,-1906,-1806,-1706
dc.w -1606,-1506,-1406,-1306,-1205,-1105,-1005,-904,-804,-704,-603,-503,-402,-302,-201,-101
dc.w 0,101,201,302,402,503,603,704,804,904,1005,1105,1205,1306,1406,1506
dc.w 1606,1706,1806,1906,2006,2105,2205,2305,2404,2503,2603,2702,2801,2900,2999,3098
dc.w 3196,3295,3393,3492,3590,3688,3786,3883,3981,4078,4176,4273,4370,4467,4563,4660
dc.w 4756,4852,4948,5044,5139,5235,5330,5425,5520,5614,5708,5803,5897,5990,6084,6177
dc.w 6270,6363,6455,6547,6639,6731,6823,6914,7005,7096,7186,7276,7366,7456,7545,7635
dc.w 7723,7812,7900,7988,8076,8163,8250,8337,8423,8509,8595,8680,8765,8850,8935,9019
dc.w 9102,9186,9269,9352,9434,9516,9598,9679,9760,9841,9921,10001,10080,10159,10238,10316
dc.w 10394,10471,10549,10625,10702,10778,10853,10928,11003,11077,11151,11224,11297,11370,11442,11514
dc.w 11585,11656,11727,11797,11866,11935,12004,12072,12140,12207,12274,12340,12406,12472,12537,12601
dc.w 12665,12729,12792,12854,12916,12978,13039,13100,13160,13219,13279,13337,13395,13453,13510,13567
dc.w 13623,13678,13733,13788,13842,13896,13949,14001,14053,14104,14155,14206,14256,14305,14354,14402
dc.w 14449,14497,14543,14589,14635,14680,14724,14768,14811,14854,14896,14937,14978,15019,15059,15098
dc.w 15137,15175,15213,15250,15286,15322,15357,15392,15426,15460,15493,15525,15557,15588,15619,15649
dc.w 15679,15707,15736,15763,15791,15817,15843,15868,15893,15917,15941,15964,15986,16008,16029,16049
dc.w 16069,16088,16107,16125,16143,16160,16176,16192,16207,16221,16235,16248,16261,16273,16284,16295
dc.w 16305,16315,16324,16332,16340,16347,16353,16359,16364,16369,16373,16376,16379,16381,16383,16384
Tunnel_YTab: ;0,360,64,32,0,w,80,y,n
DC.W $0050,$0140,$0230,$0320,$0410,$0500,$05F0,$0690,$0730,$07D0
DC.W $0870,$08C0,$0960,$09B0,$09B0,$09B0,$09B0,$09B0,$09B0,$0960
DC.W $08C0,$0870,$07D0,$0730,$0690,$05F0,$0500,$0410,$0320,$0230
DC.W $0140,$0050,$FFB0,$FEC0,$FDD0,$FCE0,$FBF0,$FB00,$FA10,$F970
DC.W $F8D0,$F830,$F790,$F740,$F6A0,$F650,$F650,$F650,$F650,$F650
DC.W $F650,$F6A0,$F740,$F790,$F830,$F8D0,$F970,$FA10,$FB00,$FBF0
DC.W $FCE0,$FDD0,$FEC0,$FFB0
Tunnel_XTab: ;90,450,64,80,0,w,1,y,n
DC.W $004F,$004F,$004D,$004B,$0048,$0044,$0040,$003B,$0035,$002F
DC.W $0029,$0022,$001A,$0013,$000B,$0003,$FFFD,$FFF5,$FFED,$FFE6
DC.W $FFDE,$FFD7,$FFD1,$FFCB,$FFC5,$FFC0,$FFBC,$FFB8,$FFB5,$FFB3
DC.W $FFB1,$FFB1,$FFB1,$FFB1,$FFB3,$FFB5,$FFB8,$FFBC,$FFC0,$FFC5
DC.W $FFCB,$FFD1,$FFD7,$FFDE,$FFE6,$FFED,$FFF5,$FFFD,$0003,$000B
DC.W $0013,$001A,$0022,$0029,$002F,$0035,$003B,$0040,$0044,$0048
DC.W $004B,$004D,$004F,$004F
JumpCode: jmp 0
*******************************************************************************
**
** Og den vildeste copperliste...
**
*******************************************************************************
SECTION MyCopper,data_c
FadeCopper: dc.w Bplcon0,$0201
dc.w $1001,$fffe
.col
mycol: dc.w Color00,0
dc.l -2
Copper: dc.w Bplcon0,$0201
dc.w Bplcon1,$0000
dc.w Bplcon2,$0024
dc.w Bplcon3,$0c40
; dc.w $01fc,$0000
; dc.w $01e4,$0000
dc.w Spr0pth,0,Spr0ptl,0
dc.w Spr1pth,0,Spr1ptl,0
dc.w Spr2pth,0,Spr2ptl,0
dc.w Spr3pth,0,Spr3ptl,0
dc.w Spr4pth,0,Spr4ptl,0
dc.w Spr5pth,0,Spr5ptl,0
dc.w Spr6pth,0,Spr6ptl,0
dc.w Spr7pth,0,Spr7ptl,0
AGA_Colors: blk.l (8+1)*2,0
dc.w $1001,$fffe
Copper_PlanePtr: dc.w Bpl1pth,0,Bpl1ptl,0
dc.w Bpl2pth,0,Bpl2ptl,0
dc.w Bpl3pth,0,Bpl3ptl,0
; dc.w $010c,$0011
dc.w Diwstrt,$2071
dc.w Bplcon0,$3200
dc.w Bplcon2,$0024
dc.w Bplcon3,$0c40
dc.w Diwstop,$40d1
dc.w Ddfstrt,$0030
dc.w Ddfstop,$00d8
dc.w Bplcon1,$0000
dc.w Bpl1mod,80-44
dc.w Bpl2mod,80-44
; dc.w $01dc,$0020
; dc.w $01e4,$2100
; dc.w $01fc,$0003
dc.w $0001,$7ffe ;WaitBlt
CopBlit1: dc.w Bltdpth,0,Bltdptl,0
dc.w Bltcon0,$0100,Bltcon1,$0000
dc.w Bltdmod,80-44
dc.w Bltsize,288<<6!22
dc.w $0001,$7ffe ;WaitBlt
CopBlit2: dc.w Bltdpth,0,Bltdptl,0
; dc.w Bltcon0,$0100,Bltcon1,$0000
; dc.w Bltdmod,80-44
dc.w Bltsize,288<<6!22
dc.w $0001,$7ffe ;WaitBlt
CopBlit3: dc.w Bltdpth,0,Bltdptl,0
; dc.w Bltcon0,$0100,Bltcon1,$0000
; dc.w Bltdmod,80-44
dc.w Bltsize,288<<6!22
dc.l -2
dc.l -2
*******************************************************************************
**
** Screens+Gfx
**
*******************************************************************************
SECTION Screens,bss_c
CNOP 0,4
_Bss1Start:
ds.b (113+YSpace)*80
Screen1: ds.b 288*80
ds.b (113+YSpace)*80
ds.b 288*80
ds.b (113+YSpace)*80
ds.b 288*80
ds.b (113+YSpace)*80
Screen2: ds.b 288*80
ds.b (113+YSpace)*80
ds.b 288*80
ds.b (113+YSpace)*80
ds.b 288*80
ds.b (113+YSpace)*80
Screen3: ds.b 288*80
ds.b (113+YSpace)*80
ds.b 288*80
ds.b (113+YSpace)*80
ds.b 288*80
ds.b (113+YSpace)*80
CNOP 0,4
_Bss1End:
*******************************************************************************
**
** Print info on program
**
*******************************************************************************
PRINTT ' '
PRINTT 'Code buffer size:'
PRINTV _CodeBufferEnd-CodeBuffer
PRINTT
PRINTT 'Bitmap size:'
PRINTV _Bss1End-_Bss1Start
PRINTT
PRINTT 'Dots ialt:'
*******************************************************************************
**
** Hardware registers
**
*******************************************************************************
Bltddat: EQU $000
Dmaconr: EQU $002
Vposr: EQU $004
Vhposr: EQU $006
Dskdatr: EQU $008
Joy0dat: EQU $00a
Joy1dat: EQU $00c
Clxdat: EQU $00e
Adkconr: EQU $010
Pot0dat: EQU $012
Pot1dat: EQU $014
Potgor: EQU $016
Serdatr: EQU $018
Dskbytr: EQU $01a
Intenar: EQU $01c
Intreqr: EQU $01e
Dskpth: EQU $020
Dskptl: EQU $022
Dsklen: EQU $024
Dskdat: EQU $026
Refptr: EQU $028
Vposw: EQU $02a
Vhposw: EQU $02c
Copcon: EQU $02e
Serdat: EQU $030
Serper: EQU $032
Potgo: EQU $034
Joytest: EQU $036
Strequ: EQU $038
Strvbl: EQU $03a
Strhor: EQU $03c
Strlong: EQU $03e
Bltcon0: EQU $040
Bltcon1: EQU $042
Bltafwm: EQU $044
Bltalwm: EQU $046
Bltcpth: EQU $048
Bltcptl: EQU $04a
Bltbpth: EQU $04c
Bltbptl: EQU $04e
Bltapth: EQU $050
Bltaptl: EQU $052
Bltdpth: EQU $054
Bltdptl: EQU $056
Bltsize: EQU $058
Bltcmod: EQU $060
Bltbmod: EQU $062
Bltamod: EQU $064
Bltdmod: EQU $066
Bltcdat: EQU $070
Bltbdat: EQU $072
Bltadat: EQU $074
Dsksync: EQU $07e
Cop1lch: EQU $080
Cop1lcl: EQU $082
Cop2lch: EQU $084
Cop2lcl: EQU $086
Copjmp1: EQU $088
Copjmp2: EQU $08a
Copins: EQU $08c
Diwstrt: EQU $08e
Diwstop: EQU $090
Ddfstrt: EQU $092
Ddfstop: EQU $094
Dmacon: EQU $096
Clxcon: EQU $98
Intena: EQU $09a
Intreq: EQU $09c
Adkcon: EQU $09e
Aud0dat: EQU $0aa
Aud1dat: EQU $0ba
Aud2dat: EQU $0ca
Aud3dat: EQU $0da
Aud0lch: EQU $0a0
Aud1lch: EQU $0b0
Aud2lch: EQU $0c0
Aud3lch: EQU $0d0
Aud0len: EQU $0a4
Aud1len: EQU $0b4
Aud2len: EQU $0c4
Aud3len: EQU $0d4
Aud0per: EQU $0a6
Aud1per: EQU $0b6
Aud2per: EQU $0c6
Aud3per: EQU $0d6
Aud0vol: EQU $0a8
Aud1vol: EQU $0b8
Aud2vol: EQU $0c8
Aud3vol: EQU $0d8
Aud0lcl: EQU $0a2
Aud1lcl: EQU $0b2
Aud2lcl: EQU $0c2
Aud3lcl: EQU $0d2
Bpl1pth: EQU $0e0
Bpl1ptl: EQU $0e2
Bpl2pth: EQU $0e4
Bpl2ptl: EQU $0e6
Bpl3pth: EQU $0e8
Bpl3ptl: EQU $0ea
Bpl4pth: EQU $0ec
Bpl4ptl: EQU $0ee
Bpl5pth: EQU $0f0
Bpl5ptl: EQU $0f2
Bpl6pth: EQU $0f4
Bpl6ptl: EQU $0f6
Bpl7pth: EQU $0f8
Bpl7ptl: EQU $0fa
Bpl8pth: EQU $0fc
Bpl8ptl: EQU $0fe
Bplcon0: EQU $100
Bplcon1: EQU $102
Bplcon2: EQU $104
Bplcon3: EQU $106
Bpl1mod: EQU $108
Bpl2mod: EQU $10a
Bpl1dat: EQU $110
Bpl2dat: EQU $112
Bpl3dat: EQU $114
Bpl4dat: EQU $116
Bpl5dat: EQU $118
Bpl6dat: EQU $11a
Spr0pth: EQU $120
Spr0ptl: EQU $122
Spr1pth: EQU $124
Spr1ptl: EQU $126
Spr2pth: EQU $128
Spr2ptl: EQU $12a
Spr3pth: EQU $12c
Spr3ptl: EQU $12e
Spr4pth: EQU $130
Spr4ptl: EQU $132
Spr5pth: EQU $134
Spr5ptl: EQU $136
Spr6pth: EQU $138
Spr6ptl: EQU $13a
Spr7pth: EQU $13c
Spr7ptl: EQU $13e
Spr0pos: EQU $140
Spr0ctl: EQU $142
Spr0data: EQU $144
Spr0datb: EQU $146
Spr1pos: EQU $148
Spr1ctl: EQU $14a
Spr1data: EQU $14c
Spr1datb: EQU $14e
Spr2pos: EQU $150
Spr2ctl: EQU $152
Spr2data: EQU $154
Spr2datb: EQU $156
Spr3pos: EQU $158
Spr3ctl: EQU $15a
Spr3data: EQU $15c
Spr3datb: EQU $15e
Spr4pos: EQU $160
Spr4ctl: EQU $162
Spr4data: EQU $164
Spr4datb: EQU $166
Spr5pos: EQU $168
Spr5ctl: EQU $16a
Spr5data: EQU $16c
Spr5datb: EQU $16e
Spr6pos: EQU $170
Spr6ctl: EQU $172
Spr6data: EQU $174
Spr6datb: EQU $176
Spr7pos: EQU $178
Spr7ctl: EQU $17a
Spr7data: EQU $17c
Spr7datb: EQU $17e
Color00: EQU $180
Color01: EQU $182
Color02: EQU $184
Color03: EQU $186
Color04: EQU $188
Color05: EQU $18a
Color06: EQU $18c
Color07: EQU $18e
Color08: EQU $190
Color09: EQU $192
Color10: EQU $194
Color11: EQU $196
Color12: EQU $198
Color13: EQU $19a
Color14: EQU $19c
Color15: EQU $19e
Color16: EQU $1a0
Color17: EQU $1a2
Color18: EQU $1a4
Color19: EQU $1a6
Color20: EQU $1a8
Color21: EQU $1aa
Color22: EQU $1ac
Color23: EQU $1ae
Color24: EQU $1b0
Color25: EQU $1b2
Color26: EQU $1b4
Color27: EQU $1b6
Color28: EQU $1b8
Color29: EQU $1ba
Color30: EQU $1bc
Color31: EQU $1be
_Custom: EQU $dff000
*******************************************************************************
**
** Interrupt addresses
**
*******************************************************************************
Lev1Base: EQU $64
Lev2Base: EQU $68
Lev3Base: EQU $6c
Lev4Base: EQU $70
Lev5Base: EQU $74
Lev6Base: EQU $78
Lev7Base: EQU $7c
Trap0: EQU $80